package com.demo.study.algorithm.cases;

/**
 * 杨辉三角形
 *
 * @author Baymax
 * @since 2024-08-13
 */
public class C02_YangHuiPascalTriangle {
    public static void main(String[] args) {
        print(5);
    }


    /**
     * 打印杨辉三角形
     *
     * @param num 需要打印的层数
     */
    public static void print(int num) {
        for (int i = 0; i < num; i++) {
            printSpace(num, i);
            for (int j = 0; j <= i; j++) {
                System.out.printf("%-4d", element(i, j));
            }
            System.out.println();
        }
    }

    /**
     * 打印空格，每行空格公式：(n-1-i) * 2
     *
     * @param num 层数
     * @param i 第几行
     */
    private static void printSpace(int num, int i) {
        int spaceNum = (num - 1 - i) * 2;
        for (int j = 0; j < spaceNum; j++) {
            System.out.print(" ");
        }
    }

    // 获取第i行，第j列的元素值（从0开始）
    private static int element(int i, int j) {
        if (j == 0 || i == j) {
            return 1;
        }
        return element(i - 1, j - 1) + element(i - 1, j);
    }
}
